home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Game Programming in C++ - Start to Finish
/
GameProgrammingS.iso
/
developer_install
/
CEGUISDK-0.4.1-VC6-STLport.exe
/
{app}
/
include
/
CEGUIRenderableElement.h
< prev
next >
Wrap
C/C++ Source or Header
|
2005-07-10
|
10KB
|
312 lines
/************************************************************************
filename: CEGUIRenderableElement.h
created: 14/4/2004
author: Paul D Turner
purpose: Interface for base class of a 'higher-level' renderable
UI entity.
*************************************************************************/
/*************************************************************************
Crazy Eddie's GUI System (http://www.cegui.org.uk)
Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*************************************************************************/
#ifndef _CEGUIRenderableElement_h_
#define _CEGUIRenderableElement_h_
#include "CEGUIBase.h"
#include "CEGUISystem.h"
#include "CEGUIColourRect.h"
#include "CEGUIVector.h"
#include "CEGUIRenderCache.h"
// Start of CEGUI namespace section
namespace CEGUI
{
/*!
\brief
*/
class CEGUIEXPORT RenderableElement
{
public:
/*************************************************************************
Drawing methods
*************************************************************************/
/*!
\brief
Draw the element chain starting with this element.
\param position
Vector3 object describing the base position to be used when rendering the element chain. Each element
in the chain will be offset from this position by it's own internal position setting.
\param clip_rect
Rect object describing the clipping area. No rendering will appear outside this area.
*/
void draw(const Vector3& position, const Rect& clip_rect);
/*!
\brief
Draw the element chain into the given RenderCache
\param renderCache
RenderCache object where element imagery is to be queued.
\return
Nothing.
*/
void draw(RenderCache& renderCache) const;
/*************************************************************************
Accessors
*************************************************************************/
/*!
\brief
Return a pointer to the next RenderableElement in the chain.
\return
Pointer to a RenderableElement object that is linked this this one. May be NULL for none.
*/
RenderableElement* getNextElement(void) const {return d_next;}
/*!
\brief
Return the rendering colours set for this RenderableElement
\return
ColourRect object describing the colours to be used when rendering this RenderableElement.
*/
const ColourRect& getColours(void) const {return d_colours;}
/*!
\brief
Return the offset position of this RenderableElement.
\return
Point object describing the offset position that this RenderableElement is to be rendered at. This
value is added to whatever position is specified when the RenderableElement::draw method is called to
obtain the final rendering position.
*/
Point getPosition(void) const {return Point(d_area.d_left, d_area.d_top);}
/*!
\brief
Return the current size of the element.
\return
Size object describing the current size of the RenderableFrame.
*/
Size getSize(void) const {return Size(d_area.getWidth(), d_area.getHeight());}
/*!
\brief
Return the area for the element.
\return
Rect object describing the pixel area (offset from some unknown location) of the frame.
*/
const Rect& getRect(void) const {return d_area;}
/*!
\brief
return whether the element colours will be applied locally to each image drawn as part of the RenderableElement, or
applied across the whole of the RenderableElement area.
\return
- true if the RenderableElement colours will be applied locally to each sub-image drawn as part of this RenderableElement.
- false if the RenderableElement colours will be applied evenly across the face of the entire RenderableElement.
*/
bool isColourRectPerImage(bool setting) const {return d_useColoursPerImage;}
/*************************************************************************
Manipulators
*************************************************************************/
/*!
\brief
Link another RenderableElement to this one.
The linked element will be drawn whenever this element is drawn using the same base position and clipping area
as provided when the RenderableElement::draw method is called. Whole chains of Renderable Elements can be
created using this system.
\param element
Pointer to a RenderableElement object that will be linked to this element.
\return
Nothing.
*/
void setNextElement(RenderableElement* element) {d_next = element;}
/*!
\brief
Sets the colours to be applied when rendering the element.
\param colours
ColourRect object describing the colours to be used.
\return
Nothing.
*/
void setColours(const ColourRect& colours) {d_colours = colours;}
/*!
\brief
Sets the colours to be applied when rendering the element.
\param top_left_colour
Colour to be applied to the top-left corner of each Image used in the element.
\param top_right_colour
Colour to be applied to the top-right corner of each Image used in the element.
\param bottom_left_colour
Colour to be applied to the bottom-left corner of each Image used in the element.
\param bottom_right_colour
Colour to be applied to the bottom-right corner of each Image used in the element.
\return
Nothing.
*/
void setColours(const colour& top_left_colour, const colour& top_right_colour, const colour& bottom_left_colour, const colour& bottom_right_colour);
/*!
\brief
Set the rendering offset position for this element.
\param position
Point object describing the offset position to use for this element. This value is added to whatever
position is specified when the RenderableElement::draw method is called to obtain the final rendering
position.
\return
Nothing.
*/
void setPosition(const Point& position) {d_area.setPosition(position);}
/*!
\brief
set the dimensions for the frame.
\param size
Size object describing the new size for the frame (in pixels)
*/
void setSize(const Size& size) {d_area.setSize(size);}
/*!
\brief
Set the area for the frame
\param area
Rect object describing the pixel area (offset from some unknown location) of the frame.
\return
None.
*/
void setRect(const Rect& area) {d_area = area;}
/*!
\brief
set whether the element colours should be applied locally to each image drawn as part of the RenderableElement, or
applied across the whole of the RenderableElement area.
\param setting
- true to specify that RenderableElement colours be applied locally to each sub-image drawn as part of this RenderableElement.
- false to specify that RenderableElement colours should be applied evenly across the face of the entire RenderableElement.
\return
Nothing.
*/
void setColourRectPerImage(bool setting) {d_useColoursPerImage = setting;}
/*************************************************************************
Construction / Destruction
*************************************************************************/
/*!
\brief
Constructor for RenderableElement base class
*/
RenderableElement(void);
/*!
\brief
Destructor for RenderableElement base class
*/
virtual ~RenderableElement(void);
protected:
/*************************************************************************
Implementation methods
*************************************************************************/
/*!
\brief
This function performs the required rendering for this element.
\param position
Vector3 object describing the final rendering position for the object.
\param clip_rect
Rect object describing the clipping area for the rendering. No rendering will be performed outside this area.
\return
Nothing.
*/
virtual void draw_impl(const Vector3& position, const Rect& clip_rect) const = 0;
/*!
\brief
Implementation method to draw the element into the given RenderCache
\param renderCache
RenderCache object where element imagery is to be queued.
\return
Nothing.
*/
virtual void draw_impl(RenderCache& renderCache) const = 0;
/*************************************************************************
Implementation Data
*************************************************************************/
RenderableElement* d_next; //!< Link to another RenderableElement.
ColourRect d_colours; //!< Colours to be used for this element;
Rect d_area; //!< Currently defined area for this element.
bool d_useColoursPerImage; //!< true if d_colours should be applied separately to each Image drawn (false to interpolate across d_area).
};
} // End of CEGUI namespace section
#endif // end of guard _CEGUIRenderableElement_h_